Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Code block to dynamically register a component #1900

Merged
merged 3 commits into from
Oct 5, 2019
Merged

Conversation

garychou
Copy link
Contributor

@garychou garychou commented Sep 30, 2019

As someone relatively new to JS + Vue, the existing sample code for dynamic imports didn't tell me how to actually register the component dynamically, which is the likely case for importing a module.

The proposed code block does both: it dynamically imports the module and also registers the component.

Summary

What kind of change does this PR introduce? (check at least one)

  • Bugfix
  • Feature
  • Code style update
  • Refactor
  • Docs
  • Build-related changes
  • Other, please describe:

If changing the UI of default theme, please provide the before/after screenshot:

Does this PR introduce a breaking change? (check one)

  • Yes
  • No

If yes, please describe the impact and migration path for existing applications:

The PR fulfills these requirements:

  • When resolving a specific issue, it's referenced in the PR's title (e.g. fix #xxx[,#xxx], where "xxx" is the issue number)

You have tested in the following browsers: (Providing a detailed version will be better.)

  • Chrome
  • Firefox
  • Safari
  • Edge
  • IE

If adding a new feature, the PR's description includes:

  • A convincing reason for adding this feature
  • Related documents have been updated
  • Related tests have been updated

To avoid wasting your time, it's best to open a feature request issue first and wait for approval before working on it.

Other information:

As someone relatively new to JS + Vue, the existing sample code for dynamic imports didn't tell me how to actually register the component dynamically, which is the likely case for importing a module.

The proposed code block does both: it dynamically imports the module and also registers the component.
@kefranabg
Copy link
Collaborator

kefranabg commented Oct 1, 2019

Hi @garychou,

Thanks for your work.

I don't understand why this example would be necessary? The main purpose of this part is to show that dynamic import fix errors for external libs trying to access window object.

Your example demonstrate the same logic but with a component dynamic import. I assume this is in case this component import itself a lib that assumes a browser environment. However I still think this is redundant content.

@garychou
Copy link
Contributor Author

garychou commented Oct 1, 2019

Hi @kefranabg,

I think most people are going to run into this problem primarily when they're attempting to use a component that assumes a browser environment. And, in that case, in addition to dynamically importing the module, they'll also need to dynamically register the component.

The current example doesn't show you how to do that.

I'm relatively new to Vue, not to mention JS, so perhaps this should be assumed knowledge. Thus, I thought the docs would be improved by showing a concise example of how to both dynamically import + register in one step. (That, or a link to another part of the docs that show how to dynamically register a component.)

@ulivz
Copy link
Member

ulivz commented Oct 5, 2019

Actually this section want to emphasize that non-ssr-friendly components should be registered at browsers lifecycle hooks. using async component directly is not a good solution.

Using dynamic components to register non-ssr-friendly components.
@ulivz
Copy link
Member

ulivz commented Oct 5, 2019

I just updated the relevant docs.

@ulivz ulivz merged commit cd0a4f8 into vuejs:master Oct 5, 2019
@vue-bot
Copy link

vue-bot commented Oct 5, 2019

Hey @garychou, thank you for your time and effort spent on this PR, contributions like yours help make Vue better for everyone. Cheers! 💚

@garychou
Copy link
Contributor Author

garychou commented Oct 5, 2019

Perfect! Thanks @ulivz!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants